Alteryx Inspire 2023のセッションをうけて、Alteryx DesignerのIn-DBツールでウィークリーチャレンジをやってみた

Alteryx Inspire 2023のセッションをうけて、Alteryx DesignerのIn-DBツールでウィークリーチャレンジをやってみた

In-DBツール使ってみた
Clock Icon2023.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、スズです。

現地時間の2023年5月22日(月)~5月25日(木)に、ラスベガスにてAlteryx Inspire 2023が開催されました。Alteryx Inspire 2023では様々なセッションがありましたが、その中に『Solving Weekly Challenge using In-Database tools』というセッションがありました。セッションの内容については、以下のブログにて記事にしています。

このセッションでは、Alteryx Communityのウィークリーチャレンジで出題された問題を、Alteryx DesignerのIn-DBツールを使って解く、という内容でした。レポートブログでも最後に触れていますが、私はIn-DBツールを使う機会がほとんどなかったため、馴染みの薄いツールとなっています。そこで、こちらのセッションの内容をうけて、実際にウィークリーチャレンジの問題をIn-DBツールを使って解いてみました。挑戦した内容を本記事でご紹介します。

問題の内容

今回挑戦した問題はこちらです。

問題で使用するデータはこちらです。

上記のデータを、「count」列の値が高い順に順位を付けていき、トップ5を出力します。なお、「count」の値が同じ場合は、同じ順位となるようにします。以下のようなデータが模範解答となります。

In-DBツールを使って解く

事前準備

In-DBツールを使って問題を解いていきますが、In-DBツールを使うための事前準備としてデータベースにウィークリーチャレンジのデータを用意する必要があります。今回はSnowflakeを使って以下のとおりデータを用意しました。画面の都合で「count」の値が見えないですが、問題にあったデータをそのままSnowflake上に用意しています。

ワークフロー作成

ここからはワークフローを作成していきます。まずは接続In-DBツールを配置し、Snowflakeのテーブルに接続します。

テーブルを選択します。今回は「ビジュアルクエリビルダ」でカラムを指定して取得します。アスタリスクを選択すると全てのカラムを選択できますが、ここでは明示的にカラムを選択したいので、「First」と「count」のカラムを選択します。

接続In-DBツールの設定は以下のようになり、「テーブルまたはクエリ」にクエリが表示されます。SELECT文でデータベース、スキーマ、テーブル、カラムを選択しています。

クエリは以下のようになっています。

SELECT <データベース>.<スキーマ>.<テーブル>."First", 
<データベース>.<スキーマ>.<テーブル>."count", 
FROM <データベース>.<スキーマ>.<テーブル>

SQLの結果を確認するため、閲覧In-DBツールを接続してワークフローを実行します。問題なくデータが表示されています。

ここからは接続In-DBツールのクエリを編集していきます。まずは「count」の値が高い順にレコードの並べ替えを試してみます。ORDER BYを使って、レコードを降順で並べ替えるようにクエリを編集します。

クエリは以下のようになっています。

SELECT <データベース>.<スキーマ>.<テーブル>."First", 
<データベース>.<スキーマ>.<テーブル>."count", 
FROM <データベース>.<スキーマ>.<テーブル>
ORDER BY <データベース>.<スキーマ>.<テーブル>."count" DESC

ワークフローを実行して結果を確認すると、「count」の値が高い順に並べ替えられています。

続いて、「count」の値が高い順に順位を付けていきます。今回は同じ値の場合に同じ順位を付けるため、DENSE_RANKを使用します。先ほどのクエリを編集し、FROMの後に会ったORDER BYを削除し、DENSE_RANKのクエリを追加します。カラム名として「rank」が表示されるように設定します。

SELECT <データベース>.<スキーマ>.<テーブル>."First", 
<データベース>.<スキーマ>.<テーブル>."count", 
DESC_RANK() OVER (ORDER BY <データベース>.<スキーマ>.<テーブル>."count" DESC) as "rank" 
FROM <データベース>.<スキーマ>.<テーブル>

ワークフローを実行して結果を確認すると、「rank」のカラムが用意され、順位が表示されています。

SQLでの処理はここまでとし、最後の仕上げとしてトップ5のレコードを表示します。フィルターIn-DBツールを使って、「rank」が5より小さいレコードのみ残します。

閲覧In-DBツールを接続、ワークフローを実行して結果を確認します。これで解答となります。

最後に

Alteryx Communityのウィークリーチャレンジの問題を、In-DBツールを使って解いてみました。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.